// 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。

// 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。


// a = [...new Set([1, 1, 1, 1, 1, 2])];
// console.log(a);
// 建立了新的数组空间，不符合

// 通过
var removeDuplicates = function(nums) {
    // nums=[...new Set(nums)]
    for (let i = 0; i < nums.length - 1; i++) {
        if (nums[i] == nums[i + 1]) {
            nums.splice(i, 1);
            i--;
        }
    }
    return nums.length + 1;
};

// 双指针法
var removeDuplicates = function(nums) {
    let n = nums.length;
    if (n <= 1) {
        return n;
    }

    let slow = 0;
    let fast = 1;

    while (fast < n) {
        if (nums[fast] !== nums[slow]) {
            slow++
            nums[slow] = nums[fast];
            fast++;
        } else {
            fast++;
        }
    }
    // 长度需要加1
    return slow + 1;
};
//  相当于快指针向前探路，有重复的就一直走，直到没有重复，将值赋给慢指针来保存已经去重的数组